home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / DATABASE / BORUSR2.ZIP;1 / PCONFIG.PRG < prev    next >
Encoding:
Text File  |  1992-06-26  |  8.5 KB  |  270 lines

  1. *-------------------------------------------------------------------------------
  2. *-- Program...: PCONFIG.PRG
  3. *-- Programmer: Ken Mayer
  4. *-- Date......: 02/20/1992
  5. *-- Notes.....: Based on Bowen Moursund's (BOWEN) routines (PRNCONFG, etc.) that
  6. *--             he kindly sent me, the idea is to deal with a user who has never
  7. *--             set printers in dBASE, or a RUNTIME scenario, where the user
  8. *--             doesn't normally have the DBSETUP routines handy, nor the 
  9. *--             printer driver files. 
  10. *-- This routine uses:  PDRIVERS.DBF, PDRIVERS.MDX, and DRIVERS.EXE
  11. *-------------------------------------------------------------------------------
  12.  
  13. *-- first, see if the file PRINTER.MEM exists, if so, restore the contents,
  14. *-- if not, create memvars and write them to it ... 
  15. if file("PRINTER.MEM")
  16.     restore from printer additive
  17. else
  18.     public p_driver1, p_driver2, p_port1, p_port2, p_pwait
  19.     p_driver1 = "GENERIC.PR2 "             && driver 1
  20.     p_name1   = "* Generic printer driver" && printer name 1
  21.     p_driver2 = "GENERIC.PR2 "             && driver 2
  22.     p_name2   = "* Generic printer driver" && printer name 2
  23.     p_wait    = .f.                        && printer pause
  24.     p_port1   = "LPT1"                     && port for printer 1
  25.     p_port2   = "LPT1"                     && port for printer 2
  26.     save all like p_* to printer.mem       && save to file ...
  27. endif
  28. cBrand = space(10)
  29.  
  30. *-- now we have printer variables we need, let's copy them into temporary
  31. *-- variables, so we can allow the user to mess with them ... if the user
  32. *-- decides that they don't like the changes, they can escape and leave.
  33.  
  34. cDriver1 = p_driver1   && current driver 1
  35. cDriver2 = p_driver2   && current driver 2
  36. cPName1  = p_name1     && current printer name 1
  37. cPName2  = p_name2     &&                      2
  38. cOPName1 = cPName1     && save data so we can return to it ...
  39. cOPName2 = cPName2
  40. cOld1    = cDriver1
  41. cOld2    = cDriver2
  42. cPort1   = p_port1     && ports ...
  43. cPort2   = p_port2
  44. lpWait   = p_wait      && wait status ...
  45.  
  46. *-- open database file (contains names, etc. of drivers in the EXE file)
  47. use pdrivers order brand
  48.  
  49. *-- define two popups ...
  50. define popup pBrand from 3,24 to 22,55 prompt field brand ;
  51.     message "<F1> = Help    Select Brand.   <Esc> = Abort"
  52. on selection popup pBrand deactivate popup
  53. define popup pModel from 3,24 to 22,55 prompt field model ;
  54.     message "<F1> = Help    Select Model.   <Esc> = Abort"
  55. on selection popup pModel deactivate popup
  56.  
  57. *-- pressing <F2> will bring up the appropriate popup from PROC below
  58. on key label F2 do drivelis1 with varread()
  59.  
  60. *-- activate picklist if an invalid printer driver is specified
  61. on readerror do drivelist
  62.  
  63. *-- now to deal with the screen ...
  64. save screen to sOld
  65. cPconColor = set("ATTRIBUTES")
  66. clear
  67. x=scrnhead("&cStand2","Printer Setup")
  68. cCursor = set("CURSOR")
  69. set cursor off
  70. *-- set colors
  71. set color of message   to &cStand2
  72. set color of highlight to &cStand
  73. set color of box       to &cStand2
  74. *-- back to our original bit
  75. set border to single
  76. @6,8 to 18,71   && draw a border ...
  77. set border to double 
  78. lOK = .t.
  79. do while .t.   && loop ...
  80.     @ 8,25 say "Printer driver 1: " get cDriver1 function "!";
  81.         valid chekdrive(cDriver1);
  82.         message "Enter name of driver for printer #1. <F2> = Picklist"
  83.     @ 9,25 say cPName1
  84.     @10,25 say "Printer driver 2: " get cDriver2 function "!";
  85.         valid chekdrive(cDriver2);
  86.         message "Enter name of driver for printer #2. <F2> = Picklist"
  87.     @11,25 say cPName2
  88.     @12,25 say "Port for Printer 1: " get cPort1;
  89.         function "M LPT1,LPT2,LPT3,COM1,COM2";
  90.         message "Press <Spacebar> to cycle choices, <Enter> to choose"
  91.     @14,25 say "Port for Printer 2: " get cPort2;
  92.         function "M LPT1,LPT2,LPT3,COM1,COM2";
  93.         message "Press <Spacebar> to cycle choices, <Enter> to choose"
  94.     @16,25 say "Page pause when printing? " get lPWait picture "Y";
  95.         message "Enter <Y>es to pause for paper insertion, or <N>o."
  96.     do center with 20,80,"&cStand2","Press <Esc> to abort ..."
  97.     set cursor on
  98.     read
  99.     set cursor off
  100.     
  101.     if lastkey() = 27  && user pressed <Esc>
  102.         lOK = .f.
  103.         exit
  104.     endif
  105.     
  106.     *-- if ok, we want to save all this back to disk ...
  107.     if yesno2(.t.,"BL","Is this ok?","","","&cl_wind1")
  108.         p_driver1 = cDriver1
  109.         p_driver2 = cDriver2
  110.         p_name1   = cPName1
  111.         p_name2   = cPName2
  112.         p_Port1   = cPort1
  113.         p_Port2   = cPort2
  114.         p_PWait   = lPWait
  115.         cSafety = set("SAFETY")
  116.         set safety off
  117.         save all like p_* to printer.mem
  118.         set safety &cSafety
  119.         lOK = .t.
  120.         exit
  121.     endif
  122.     
  123. enddo  && mail loop
  124.  
  125. use      && close database -- not needed now
  126. if lOK   && user is satisfied with changes ...
  127.     if cOld1 # p_driver1 .or. cOld2 # p_driver2 && we changed one of 'em
  128.         do center with 20,80,"&cStand2","Extracting printer drivers"
  129.         set console off
  130.         *-- drivers is the Borland self extracting zip of drivers (1.5) ...
  131.         if .not. file("&p_driver1")  && does it already exist?
  132.             run drivers.exe -o &p_driver1 > NUL  && extract it
  133.         endif
  134.         if .not. file("&p_driver2")  && does this one exist?
  135.             run drivers.exe -o &p_driver2 > NUL  && extract 
  136.         endif
  137.         set console on
  138.     endif  && cOld ...
  139. endif && lOK
  140.  
  141. *-- Cleanup/end of processing/RETURN to calling program or dot prompt
  142. release popup pBrand
  143. release popup pModel
  144. on key label F2
  145. on ReadError
  146. set cursor &cCursor
  147. restore screen from sOld
  148. release screen sOld
  149. *-- reset colors
  150. do ReColor with cPConColor
  151.  
  152. RETURN
  153.  
  154. *-------------------------------------------------------------------------------
  155. *-- End of Main processing, procedures below ...
  156. *-------------------------------------------------------------------------------
  157.  
  158. PROCEDURE DriveLis1
  159.  
  160.     parameters cField
  161.     *-- if editing one of the driver variables
  162.     if cField = "CDRIVER1" .or. cField = "CDRIVER2"
  163.         do drivelist
  164.     else
  165.         ?? chr(7)  && beep at 'em
  166.     endif
  167.  
  168. RETURN
  169.  
  170. PROCEDURE DriveList
  171.     
  172.     on key label F2 ?? chr(7)  && beep, avoid recursion ...
  173.     set cursor off
  174.     
  175.     *-- used to deal with the printer name ...
  176.     if varread() = "CDRIVER1"
  177.         lDriver1 = .t.
  178.     else
  179.         lDriver1 = .f.
  180.     endif
  181.         
  182.     *-- do a shadow and all that ...
  183.     save screen to sDrive
  184.     do shadow with 3,24,22,55  && use shadow from PROC.PRG
  185.     activate popup pBrand
  186.     restore screen from sDrive
  187.     lDone = .f.
  188.     cBrand = prompt()  && get the printer 'brand' 
  189.     if .not. IsBlank(cBrand)  && if user didn't press <Esc>
  190.         if cBrand = "* Generic printer driver"
  191.             *-- clear the field and enter the file name
  192.             keyboard (chr(26)+chr(25)+"GENERIC.PR2"+chr(13)) CLEAR
  193.             lDone = .t.
  194.             if lDriver1
  195.                 cPName1 = "* Generic printer driver"
  196.             else
  197.                 cPName2 = "* Generic printer driver"
  198.             endif
  199.         endif  && generic
  200.         if cBrand = "* ASCII (No printer codes)"
  201.             *-- clear the field and enter file name
  202.             keyboard (chr(26)+chr(25)+"ASCII.PR2"+chr(13)) CLEAR
  203.             lDone = .t.
  204.             if lDriver1
  205.                 cPName1 = "* ASCII (No printer codes)"
  206.             else
  207.                 cPName2 = "* ASCII (No printer codes)"
  208.             endif
  209.         endif
  210.         
  211.         *-- we have a brand, and it's not 'generic/ascii', get model
  212.         if .not. lDone
  213.             *-- put file in natural order and filter for brand ...
  214.             set order to
  215.             set filter to brand = cBrand
  216.             goto top
  217.             *-- shadow and popup
  218.             do shadow with 3,24,22,55
  219.             activate popup pModel
  220.             cModel = left(prompt(),30)
  221.             *-- if user selects a model
  222.             if .not. IsBlank(cModel)
  223.                 set filter to
  224.                 *-- activate index for lookup
  225.                 set order to model
  226.                 *-- lookup the filename, clear field, and enter file name
  227.                 keyboard (chr(26)+chr(25)+trim(lookup(driver,cModel,model))+;
  228.                     iif(len(trim(driver))=12,"",chr(13))) clear
  229.                 *-- deal with printer 'name'
  230.                 if lDriver1
  231.                     cPName1 = trim(cBrand)+" - "+trim(cModel)
  232.                 else
  233.                     cPName2 = trim(cBrand)+" - "+trim(cModel)
  234.                 endif
  235.             endif
  236.             *-- return all this back to the way it was
  237.             set filter to
  238.             set order to brand
  239.             goto top
  240.         endif  && .not. lDone
  241.         
  242.     endif && .not. IsBlank(cBrand)
  243.     
  244.     *-- reset
  245.     on key label F2 do drivelis1 with varread()
  246.     restore screen from sDrive
  247.     release screen sDrive
  248.     set color to &cStand
  249.     set cursor on
  250.     @ 9,25 clear to 9,50  && clear out old printer name
  251.     @ 9,25 say cPName1    && display new ...
  252.     @11,25 clear to 11,50 && ditto
  253.     @11,25 say cPName2    && and again ...
  254.     
  255. RETURN
  256.  
  257. FUNCTION ChekDrive  && check for a valid driver
  258.     
  259.     parameters cDriver
  260.     set order to driver
  261.     lReturn = seek(cDriver)
  262.     set order to brand
  263.     goto top
  264.     
  265. RETURN lReturn
  266.  
  267. *-------------------------------------------------------------------------------
  268. *-- End of Program: PCONFIG.PRG
  269. *-------------------------------------------------------------------------------
  270.